package com.shopping.mall.core.module.admin.service;

import com.shopping.mall.auth.VO.AdminVo;
import com.shopping.mall.auth.VO.UserVo;
import com.shopping.mall.base.http.Result;
import com.shopping.mall.core.module.admin.entity.Admin;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * <p>
 * Admin服务类
 * </p>
 *
 * @author zzy
 * @date 2021-08-09
 */
public interface AdminService extends IService<Admin> {

    /**
     * 查询个人信息
     *
     * @return Result<Object>
     */
    Result<Object> adminInfo();

    /**
     * 超级管理员查询管理员信息
     *
     * @param id
     * @return Result<Object>
     */
    Result<Object> adminInfo(String id);

    /**
     * 修改个人信息
     *
     * @param adminVo
     * @return Result<Object>
     */
    Result<Object> changeAdminInfo(AdminVo adminVo);

    /**
     * 超级管理员修改管理员信息
     *
     * @param adminVo
     * @return
     */
    Result<Object> changeAdminInfoBySuper(AdminVo adminVo);

    /**
     * 登录
     *
     * @param adminVo
     * @return Result<Object>
     */
    Result<Object> login(AdminVo adminVo);

    /**
     * 退出登录
     *
     * @return Result<Object>
     */
    Result<Object> logout();

    /**
     * 刷新token
     *
     * @param refreshToken: refreshToken
     * @return Result<Object>
     */
    Result<Object> refreshToken(String refreshToken);

    /**
     * 添加管理员
     *
     * @param adminVo
     * @return Result<Object>
     */
    Result<Object> add(AdminVo adminVo);

    /**
     * 分页查询
     *
     * @param current：页码
     * @param size：每页条数
     * @param admin：筛选条件
     * @return IPage<Admin>
     */
    IPage<Admin> getAdminPage(Integer current, Integer size, Admin admin);

    /**
     * 查询所有
     *
     * @param admin：筛选条件
     * @return List<Admin>
     */
    List<Admin> getAll(Admin admin);

    /**
     * 通过id删除
     *
     * @param id：adminId
     * @return Result<Object>
     */
    Result<Object> deleteById(String id);

    /**
     * 批量删除
     *
     * @param ids：id列表
     * @return Result<Object>
     */
    @Deprecated
    Result<Object> batchDelete(List<String> ids);

    /**
     * 用户列表
     *
     * @param current: 页码
     * @param size:    一页的大小
     * @return
     */
    Result<Object> userList(Integer current, Integer size);

    /**
     * 管理员修改用户信息
     *
     * @param userVo
     * @return
     */
    Result<Object> changeUserInfoByAdmin(UserVo userVo);
}
